package com.whfc.openapi.api.emp.service;

import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.emp.dto.AppEmpAttendRecordDTO;
import com.whfc.emp.dto.AppEmpGpsDTO;
import com.whfc.emp.dto.WxEmpCurveMapDTO;
import com.whfc.emp.dto.openapi.*;
import com.whfc.emp.param.openapi.*;
import com.whfc.entity.dto.emp.AttendStatDTO;

import java.util.Date;
import java.util.List;

/**
 * @author sun_guodong
 * @description 开放平台——人员管理
 * @date 2020-06-22
 */
public interface OpenApiEmpService {
    /**
     * 开放平台获取人员列表
     *
     * @param deptId
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<OpenApiEmpDTO> list(Integer deptId, Integer pageNum, Integer pageSize);

    /**
     * 开放平台获取单个人员信息
     *
     * @param empId
     * @return
     */
    OpenApiEmpDTO detail(Integer empId);

    /**
     * 开放平台添加人员信息
     *
     * @param param
     * @return
     */
    OpenApiEmpDTO add(OpenApiAddEmpParam param);

    /**
     * 开放平台修改人员
     *
     * @param param
     */
    void edit(OpenApiEditEmpParam param);

    /**
     * 开放平台删除人员
     *
     * @param empId
     */
    void del(Integer empId);

    /**
     * 人员绑定安全帽
     *
     * @param param
     */
    void bind(OpenApiBindEmpParam param);

    /**
     * 开放平台人员解绑安全帽
     *
     * @param param
     */
    void unbind(OpenApiBindEmpParam param);

    /**
     * 开放平台获取人员硬件数据
     *
     * @param empId
     * @return
     */
    OpenApiEmpDTO deviceData(Integer empId);

    /**
     * 开放平台人员进场
     *
     * @param param
     */
    void enter(OpenApiEmpEnterParam param);

    /**
     * 开放平台人员退场
     *
     * @param param
     */
    void outer(OpenApiEmpEnterParam param);

    /**
     * 开放平台查询电子围栏列表
     *
     * @param deptId
     * @return
     */
    ListData<OpenApiFenceDTO> fenceList(Integer deptId);

    /**
     * 开放平台添加电子围栏
     *
     * @param param
     * @return
     */
    OpenApiFenceDTO fenceAdd(OpenApiFenceAddParam param);

    /**
     * 开放平台编辑电子围栏
     *
     * @param param
     */
    void fenceEdit(OpenApiFenceEditParam param);

    /**
     * 开放平台删除电子围栏
     *
     * @param fenceId
     */
    void fenceDel(Integer fenceId);

    /**
     * 开放平台电子围栏添加人员
     *
     * @param param
     */
    void fenceInvoke(OpenApiFenceInvokeParam param);

    /**
     * 开放平台电子围栏删除人员
     *
     * @param param
     */
    void fenceRevoke(OpenApiFenceInvokeParam param);

    /**
     * 开放平台查询人员每日考勤
     *
     * @param empId
     * @param date
     * @return
     */
    OpenApiEmpAttendDayDTO attendDay(Integer empId, Date date);

    /**
     * 开放平台查询人员进出记录
     *
     * @param empId
     * @param date
     * @return
     */
    ListData<AppEmpAttendRecordDTO> attendRecord(Integer empId, Date date);

    /**
     * 开放平台查询人员运动轨迹
     *
     * @param empId
     * @param date
     * @return
     */
    ListData<AppEmpGpsDTO> gps(Integer empId, Date date);

    /**
     * 开放平台查询人员每日安全帽预警
     *
     * @param empId
     * @param date
     * @return
     */
    ListData<OpenApiEmpWarnDTO> warnList(Integer empId, Date date);

    /**
     * 开放平台查询多人曲线图
     *
     * @param deptId
     * @return
     */
    WxEmpCurveMapDTO getMultiEmpCurveData(Integer deptId);

    /**
     * 澳门项目-人员类型统计
     *
     * @param deptId
     * @return
     */
    List<StatItem> adsqStatistics(Integer deptId);

    /**
     * 澳门项目-在场人员数量
     *
     * @param deptId
     * @return
     */
    List<StatItem> adsqLocaleInEmpNum(Integer deptId);

    /**
     * 澳门项目-闸机统计
     *
     * @param deptId
     * @param date
     * @return
     */
    AttendStatDTO adsqFaceGateStatistics(Integer deptId, Date date);

}
